package com.yeskery.nut.extend.mcp.core.schema;

import java.util.List;

/**
 * 资源规范
 * @author sprout
 * 2025-04-24 10:08
 */
public abstract class ResourceSchema {

    /**
     * 基础资源
     */
    public static class BaseResource implements Annotated {
        /** 资源名称 */
        private String name;
        /** 资源描述 */
        private String description;
        /** 资源mimeType */
        private String mimeType;
        /** 资源注解 */
        private Annotations annotations;

        /**
         * 获取资源名称
         * @return 资源名称
         */
        public String getName() {
            return name;
        }

        /**
         * 设置资源名称
         * @param name 资源名称
         */
        public void setName(String name) {
            this.name = name;
        }

        /**
         * 获取资源描述
         * @return 资源描述
         */
        public String getDescription() {
            return description;
        }

        /**
         * 设置资源描述
         * @param description 资源描述
         */
        public void setDescription(String description) {
            this.description = description;
        }

        /**
         * 获取资源mimeType
         * @return 资源mimeType
         */
        public String getMimeType() {
            return mimeType;
        }

        /**
         * 设置资源mimeType
         * @param mimeType 资源mimeType
         */
        public void setMimeType(String mimeType) {
            this.mimeType = mimeType;
        }

        /**
         * 获取资源注解
         * @return 资源注解
         */
        public Annotations getAnnotations() {
            return annotations;
        }

        /**
         * 设置资源注解
         * @param annotations 资源注解
         */
        public void setAnnotations(Annotations annotations) {
            this.annotations = annotations;
        }

        @Override
        public Annotations annotations() {
            return getAnnotations();
        }
    }

    /**
     * 资源
     */
    public static class Resource extends BaseResource {
        /** 资源uri */
        private String uri;

        /**
         * 获取资源uri
         * @return 资源uri
         */
        public String getUri() {
            return uri;
        }

        /**
         * 设置资源uri
         * @param uri 资源uri
         */
        public void setUri(String uri) {
            this.uri = uri;
        }

    }

    /**
     * 资源模板
     */
    public static class ResourceTemplate extends BaseResource {
        /** 资源uri模板 */
        private String uriTemplate;

        /**
         * 获取资源uri模板
         * @return 资源uri模板
         */
        public String getUriTemplate() {
            return uriTemplate;
        }

        /**
         * 设置资源uri模板
         * @param uriTemplate 资源uri模板
         */
        public void setUriTemplate(String uriTemplate) {
            this.uriTemplate = uriTemplate;
        }
    }

    /**
     * 列出资源结果
     */
    public static class ListResourcesResult {
        /** 资源列表 */
        private List<BaseResource> resources;
        /** 下一页游标 */
        private String nextCursor;

        /**
         * 获取资源列表
         * @return 资源列表
         */
        public List<BaseResource> getResources() {
            return resources;
        }

        /**
         * 设置资源列表
         * @param resources 资源列表
         */
        public void setResources(List<BaseResource> resources) {
            this.resources = resources;
        }

        /**
         * 获取下一页游标
         * @return 下一页游标
         */
        public String getNextCursor() {
            return nextCursor;
        }

        /**
         * 设置下一页游标
         * @param nextCursor 下一页游标
         */
        public void setNextCursor(String nextCursor) {
            this.nextCursor = nextCursor;
        }
    }

    /**
     * 列出资源模板结果
     */
    public static class ListResourceTemplatesResult {
        /** 资源模板列表 */
        private List<ResourceTemplate> resourceTemplates;
        /** 下一页游标 */
        private String nextCursor;

        /**
         * 获取资源模板列表
         * @return 资源模板列表
         */
        public List<ResourceTemplate> getResourceTemplates() {
            return resourceTemplates;
        }

        /**
         * 设置资源模板列表
         * @param resourceTemplates 资源模板列表
         */
        public void setResourceTemplates(List<ResourceTemplate> resourceTemplates) {
            this.resourceTemplates = resourceTemplates;
        }

        /**
         * 获取下一页游标
         * @return 下一页游标
         */
        public String getNextCursor() {
            return nextCursor;
        }

        /**
         * 设置下一页游标
         * @param nextCursor 下一页游标
         */
        public void setNextCursor(String nextCursor) {
            this.nextCursor = nextCursor;
        }
    }

    /**
     * 读取资源请求
     */
    public static class ReadResourceRequest {
        /** 资源uri */
        private String uri;

        /**
         * 获取资源uri
         * @return 资源uri
         */
        public String getUri() {
            return uri;
        }

        /**
         * 设置资源uri
         * @param uri 资源uri
         */
        public void setUri(String uri) {
            this.uri = uri;
        }
    }

    /**
     * 读取资源结果
     */
    public static class ReadResourceResult {
        /** 资源内容 */
        private ResourceContentsSchema.ResourceContents contents;

        /**
         * 获取资源内容
         * @return 资源内容
         */
        public ResourceContentsSchema.ResourceContents getContents() {
            return contents;
        }

        /**
         * 设置资源内容
         * @param contents 资源内容
         */
        public void setContents(ResourceContentsSchema.ResourceContents contents) {
            this.contents = contents;
        }
    }

    /**
     * 订阅资源请求
     */
    public static class UnsubscribeRequest {
        /** 资源uri */
        private String uri;

        /**
         * 获取资源uri
         * @return 资源uri
         */
        public String getUri() {
            return uri;
        }

        /**
         * 设置资源uri
         * @param uri 资源uri
         */
        public void setUri(String uri) {
            this.uri = uri;
        }
    }

    /**
     * 资源注解
     */
    public static class Annotations {
        /** 资源访问权限 */
        private List<Role> audience;
        /** 资源优先级 */
        private Double priority;

        /**
         * 获取资源访问权限
         * @return 资源访问权限
         */
        public List<Role> getAudience() {
            return audience;
        }

        /**
         * 设置资源访问权限
         * @param audience 资源访问权限
         */
        public void setAudience(List<Role> audience) {
            this.audience = audience;
        }

        /**
         * 获取资源优先级
         * @return 资源优先级
         */
        public Double getPriority() {
            return priority;
        }

        /**
         * 设置资源优先级
         * @param priority 资源优先级
         */
        public void setPriority(Double priority) {
            this.priority = priority;
        }
    }

    /**
     * 资源注解
     */
    public interface Annotated {
        /**
         * 资源注解
         * @return 资源注解描述
         */
        Annotations annotations();
    }
}
